{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 多图协作\n",
    "\n",
    "编译 langgraph 实例会将其转换为常规的可运行的 langchain。 这可以用作任何其他图中的节点。\n",
    "\n",
    "创建子图可以让您构建诸如多代理团队之类的东西，其中每个团队都可以跟踪自己单独的状态。\n",
    "\n",
    "下面是一个简单的（有点做作的）图示例，其中一个节点本身就是一个图。 该子图将包含一个简单的无工具“代理”，它生成响应，然后循环自我不断改进"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%pip install -U langgraph langchain_anthropic"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import getpass\n",
    "import os\n",
    "\n",
    "os.environ[\"LANGCHAIN_API_KEY\"] = getpass.getpass(\"LANGCHAIN_API_KEY\")\n",
    "os.environ[\"ANTHROPIC_API_KEY\"] = getpass.getpass(\"ANTHROPIC_API_KEY\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_openai import ChatOpenAI, OpenAI\n",
    "\n",
    "openai_api_key = \"EMPTY\"\n",
    "openai_api_base = \"http://127.0.0.1:1234/v1\"\n",
    "# llm = ChatOpenAI(\n",
    "#     openai_api_key=openai_api_key,\n",
    "#     openai_api_base=openai_api_base,\n",
    "#     temperature=0.3,\n",
    "#     model_kwargs = {\n",
    "#         \"frequency_penalty\":0.9,\n",
    "#         \"presence_penalty\":0.9\n",
    "#     }\n",
    "# )\n",
    "llm = ChatOpenAI(\n",
    "    openai_api_key=openai_api_key,\n",
    "    openai_api_base=openai_api_base,\n",
    "    temperature=0.3,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Subgraph\n",
    "\n",
    "我们的玩具子图将是一个简单的循环，它生成一个笑话，然后自我批评。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "import operator\n",
    "from typing import Annotated, List, TypedDict\n",
    "\n",
    "# from langchain_anthropic import ChatAnthropic\n",
    "from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n",
    "\n",
    "from langgraph.graph import END, StateGraph\n",
    "from langchain_core.messages import SystemMessage,HumanMessage,AIMessage\n",
    "\n",
    "# llm = ChatAnthropic(temperature=0, model_name=\"claude-3-opus-20240229\")\n",
    "prompt = ChatPromptTemplate.from_messages(\n",
    "    [\n",
    "        (\n",
    "            \"system\",\n",
    "            \"你就是那个爱开玩笑的人。 用一个笑话来回应，这是有史以来最好的笑话。\",\n",
    "        ),\n",
    "        MessagesPlaceholder(variable_name=\"messages\"),\n",
    "    ],\n",
    ")\n",
    "\n",
    "\n",
    "critic_prompt = ChatPromptTemplate.from_messages(\n",
    "    [\n",
    "        (\"system\", \"\"\"{message}\n",
    "-------\n",
    "请提出对这个笑话的改进建议，使其成为有史以来最好的笑话。\"\"\"),\n",
    "    ],\n",
    ")\n",
    "\n",
    "\n",
    "def update(out):\n",
    "    return {\"messages\": [(\"assistant\",out.content)]}\n",
    "\n",
    "\n",
    "def replace_role(out):\n",
    "    print(\"replace_role--------\")\n",
    "    print(out)\n",
    "    print(\"replace_role_end--------\")\n",
    "    return {\"messages\": [HumanMessage(out.content)]}\n",
    "\n",
    "def critiqueFn(state):\n",
    "    print(\"state---------------------\")\n",
    "    print(state)\n",
    "    message = state[\"messages\"][-1]\n",
    "    print(message)\n",
    "    print(\"state end---------------------\")\n",
    "    return {\"message\":message[1]}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "## 构建子图\n",
    "\n",
    "\n",
    "class SubGraphState(TypedDict):\n",
    "    messages: Annotated[List, operator.add]\n",
    "\n",
    "\n",
    "builder = StateGraph(SubGraphState)\n",
    "builder.add_node(\"tell_joke\", prompt | llm | update)\n",
    "builder.add_node(\"critique\", critiqueFn |critic_prompt | llm | replace_role)\n",
    "\n",
    "\n",
    "def route(state):\n",
    "    return END if len(state[\"messages\"]) >= 3 else \"critique\"\n",
    "\n",
    "\n",
    "builder.add_conditional_edges(\"tell_joke\", route)\n",
    "builder.add_edge(\"critique\", \"tell_joke\")\n",
    "builder.set_entry_point(\"tell_joke\")\n",
    "joke_graph = builder.compile()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import Image\n",
    "\n",
    "Image(joke_graph.get_graph().draw_png())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'tell_joke': {'messages': [('assistant', '为什么减肥就像骑自行车呢？因为一旦你停下来，你就得重新开始！')]}}\n",
      "state---------------------\n",
      "{'messages': [('user', '讲一个关于减肥的笑话'), ('assistant', '为什么减肥就像骑自行车呢？因为一旦你停下来，你就得重新开始！')]}\n",
      "('assistant', '为什么减肥就像骑自行车呢？因为一旦你停下来，你就得重新开始！')\n",
      "state end---------------------\n",
      "replace_role--------\n",
      "content='这个笑话本身已经具有幽默感了，但为了让它更加有趣和令人印象深刻，我们可以考虑以下改进建议：\\n\\n1. 增加细节描述：在笑话中加入一些关于骑自行车或减肥的具体场景或细节，让读者更容易产生共鸣。例如，可以描述一个人在骑自行车时突然停下来，然后看着自己发胖的身体，意识到需要重新开始减肥。\\n2. 运用比喻：将减肥比作其他更具有挑战性和困难的事情，以增加幽默感。例如，可以将减肥比作攀登珠穆朗玛峰，一旦你停下脚步，你就得从头再来。\\n3. 加入反转或意外元素：在笑话中加入一个意想不到的转折点，让读者感到惊喜和愉悦。例如，一个人努力减肥后终于成功了，但当他骑自行车时却因为太瘦而无法保持平衡，不得不重新开始增重。' response_metadata={'token_usage': {'completion_tokens': 184, 'prompt_tokens': 184, 'total_tokens': 368}, 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}\n",
      "replace_role_end--------\n",
      "{'critique': {'messages': [HumanMessage(content='这个笑话本身已经具有幽默感了，但为了让它更加有趣和令人印象深刻，我们可以考虑以下改进建议：\\n\\n1. 增加细节描述：在笑话中加入一些关于骑自行车或减肥的具体场景或细节，让读者更容易产生共鸣。例如，可以描述一个人在骑自行车时突然停下来，然后看着自己发胖的身体，意识到需要重新开始减肥。\\n2. 运用比喻：将减肥比作其他更具有挑战性和困难的事情，以增加幽默感。例如，可以将减肥比作攀登珠穆朗玛峰，一旦你停下脚步，你就得从头再来。\\n3. 加入反转或意外元素：在笑话中加入一个意想不到的转折点，让读者感到惊喜和愉悦。例如，一个人努力减肥后终于成功了，但当他骑自行车时却因为太瘦而无法保持平衡，不得不重新开始增重。')]}}\n",
      "{'tell_joke': {'messages': [('assistant', '为什么减肥就像骑自行车呢？因为你必须一直踩踏板才能保持前进，一旦你停下来，你就得重新开始！')]}}\n",
      "{'__end__': {'messages': [('user', '讲一个关于减肥的笑话'), ('assistant', '为什么减肥就像骑自行车呢？因为一旦你停下来，你就得重新开始！'), HumanMessage(content='这个笑话本身已经具有幽默感了，但为了让它更加有趣和令人印象深刻，我们可以考虑以下改进建议：\\n\\n1. 增加细节描述：在笑话中加入一些关于骑自行车或减肥的具体场景或细节，让读者更容易产生共鸣。例如，可以描述一个人在骑自行车时突然停下来，然后看着自己发胖的身体，意识到需要重新开始减肥。\\n2. 运用比喻：将减肥比作其他更具有挑战性和困难的事情，以增加幽默感。例如，可以将减肥比作攀登珠穆朗玛峰，一旦你停下脚步，你就得从头再来。\\n3. 加入反转或意外元素：在笑话中加入一个意想不到的转折点，让读者感到惊喜和愉悦。例如，一个人努力减肥后终于成功了，但当他骑自行车时却因为太瘦而无法保持平衡，不得不重新开始增重。'), ('assistant', '为什么减肥就像骑自行车呢？因为你必须一直踩踏板才能保持前进，一旦你停下来，你就得重新开始！')]}}\n"
     ]
    }
   ],
   "source": [
    "for step in joke_graph.stream({\"messages\": [(\"user\", \"讲一个关于减肥的笑话\")]}):\n",
    "    print(step)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Main Graph\n",
    "\n",
    "主图只是一个路由器，它将消息发送到笑话图或直接响应。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_core.output_parsers import StrOutputParser\n",
    "output_parser = StrOutputParser()\n",
    "\n",
    "class AssistantState(TypedDict):\n",
    "    conversation: Annotated[List, operator.add]\n",
    "\n",
    "\n",
    "# assistant_llm = ChatAnthropic(temperature=0, model_name=\"claude-3-opus-20240229\")\n",
    "assistant_prompt = ChatPromptTemplate.from_messages(\n",
    "    [\n",
    "        (\"system\", \"你是一个得力的助手\"),\n",
    "        MessagesPlaceholder(variable_name=\"conversation\"),\n",
    "    ]\n",
    ")\n",
    "\n",
    "\n",
    "def add_to_conversation(message):\n",
    "    return {\"conversation\": [message]}\n",
    "\n",
    "\n",
    "main_builder = StateGraph(AssistantState)\n",
    "main_builder.add_node(\n",
    "    \"assistant\", assistant_prompt | llm | add_to_conversation\n",
    ")\n",
    "\n",
    "\n",
    "def get_user_message(state: AssistantState):\n",
    "    last_message = state[\"conversation\"][-1]\n",
    "    # Convert to sub-graph state\n",
    "    return {\"messages\": [last_message]}\n",
    "\n",
    "\n",
    "def get_joke(state: SubGraphState):\n",
    "    final_joke = state[\"messages\"][-1]\n",
    "    return {\"conversation\": [final_joke]}\n",
    "\n",
    "\n",
    "main_builder.add_node(\"joke_graph\", get_user_message | joke_graph | get_joke)\n",
    "\n",
    "\n",
    "def route(state: AssistantState):\n",
    "    message = state[\"conversation\"][-1][-1]\n",
    "\n",
    "    assistant_prompt = ChatPromptTemplate.from_messages(\n",
    "        [\n",
    "            (\"system\", \"\"\"你是一个意图识别的助手，能够识别以下意图：\n",
    "1. 讲故事\n",
    "2. 讲笑话\n",
    "3. AI绘画\n",
    "4. 学习知识\n",
    "5. 其他\n",
    "\n",
    "例如：\n",
    "用户输入：给我说个故事把。\n",
    "1\n",
    "用户输入：给我画个美女图片。\n",
    "3\n",
    "\n",
    "------\n",
    "用户输入：{input}\n",
    "\n",
    "请识别用户意图，返回上面意图的数字序号，只返回数字，不返回任何其他字符。\n",
    "\"\"\")\n",
    "        ]\n",
    "    )\n",
    "\n",
    "    chain = assistant_prompt | llm | output_parser\n",
    "\n",
    "    result = chain.invoke({\n",
    "        \"input\":message\n",
    "    })\n",
    "\n",
    "    result = result.strip()\n",
    "\n",
    "    print(\"意图识别：\",result)\n",
    "\n",
    "    if result==\"2\" :\n",
    "        return \"joke_graph\"\n",
    "    else :\n",
    "        return \"assistant\"\n",
    "\n",
    "\n",
    "main_builder.set_conditional_entry_point(\n",
    "    route,\n",
    ")\n",
    "main_builder.set_finish_point(\"assistant\")\n",
    "main_builder.set_finish_point(\"joke_graph\")\n",
    "graph = main_builder.compile()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Image(graph.get_graph().draw_png())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "意图识别： 2\n",
      "state---------------------\n",
      "{'messages': [('user', '请给我讲个减肥笑话'), ('assistant', '为什么减肥总是这么难？因为肉很顽固，它们不想离开你！')]}\n",
      "('assistant', '为什么减肥总是这么难？因为肉很顽固，它们不想离开你！')\n",
      "state end---------------------\n",
      "replace_role--------\n",
      "content='这个笑话本身已经很有趣了，但如果你想要让它更加出色，可以考虑以下几点：\\n1. 增加一些细节或场景描述，让读者更容易想象到画面。例如：\"为什么减肥总是这么难？因为肉很顽固，它们不想离开你！就像你小时候最喜欢的玩具，紧紧抱住不放一样。\"\\n2. 加入双关语或其他语言技巧，增加笑话的趣味性。例如：\"为什么减肥总是这么难？因为肉很顽固，它们不想离开你！就像你最爱的零食，粘在手上就不想放手一样。\"\\n3. 改变叙述方式或视角，让读者感到新鲜和惊喜。例如：\"为什么减肥总是这么难？因为肉很顽固，它们不想离开你！这是一场人与食物的持久战，而这场战争中，我们往往都是输家。\"' response_metadata={'token_usage': {'completion_tokens': 180, 'prompt_tokens': 180, 'total_tokens': 360}, 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}\n",
      "replace_role_end--------\n",
      "{'joke_graph': {'conversation': [('assistant', '谢谢你的建议！让我再尝试一个改进版的笑话：\\n\\n为什么减肥总是这么难？因为肉很顽固，它们不想离开你！就像你最爱的零食，粘在手上就不想放手一样。但是，别担心，只要你有足够的决心和毅力，总有一天你会把它们甩掉的！')]}}\n",
      "{'__end__': {'conversation': [('user', '请给我讲个减肥笑话'), ('assistant', '谢谢你的建议！让我再尝试一个改进版的笑话：\\n\\n为什么减肥总是这么难？因为肉很顽固，它们不想离开你！就像你最爱的零食，粘在手上就不想放手一样。但是，别担心，只要你有足够的决心和毅力，总有一天你会把它们甩掉的！')]}}\n"
     ]
    }
   ],
   "source": [
    "for step in graph.stream({\"conversation\": [(\"user\", \"请给我讲个减肥笑话\")]}):\n",
    "    print(step)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "意图识别： 4\n",
      "{'assistant': {'conversation': [AIMessage(content='夏天是减肥的好时机，因为天气炎热，人们更容易出汗和代谢。以下是一些适合夏季的减肥餐建议：\\n\\n1. 沙拉：沙拉是夏天最受欢迎的健康食品之一。你可以选择各种新鲜蔬菜、水果、瘦肉或海鲜作为配料，搭配低脂沙拉酱或橄榄油醋汁。例如，尝试黄瓜番茄沙拉、牛油果虾仁沙拉等。\\n2. 烤鱼和蔬菜：将新鲜的鱼类（如鲈鱼、三文鱼）用香料腌制后，放入烤箱中烤制，再搭配一些新鲜蔬菜（如芦笋、西葫芦、胡萝卜）一起食用，既美味又健康。\\n3. 鸡肉串配时蔬：将鸡胸肉切成小块，加入调料腌制后穿在竹签上，与各种蔬菜（如青椒、洋葱、蘑菇）一起烤制，既可以作为正餐也可以作为小吃。\\n4. 水果酸奶冰沙：将新鲜的水果（如草莓、蓝莓、香蕉）和低脂酸奶混合在一起，再加入一些冰块打成冰沙，既清凉解暑又营养丰富。\\n5. 清蒸海鲜配糙米饭：选择新鲜的虾、贝类或鱼类进行清蒸，搭配一碗糙米饭，既能满足你的味蕾又能提供足够的蛋白质和纤维素。\\n6. 蔬菜汤：用各种新鲜蔬菜（如番茄、胡萝卜、芹菜）熬制一锅美味的蔬菜汤，既可以作为主食也可以作为配餐。\\n7. 烤鸡胸肉配沙拉：将鸡胸肉切成小块，加入调料腌制后放入烤箱中烤制，再搭配一份新鲜的蔬菜沙拉，简单又健康。\\n8. 蒸红薯和鸡蛋：将红薯去皮切块，与鸡蛋一起放入锅中蒸熟，既可以作为主食也可以作为配餐。\\n9. 番茄意面：用新鲜番茄熬制成酱汁，拌入意大利面中，再加入一些橄榄油、盐和黑胡椒调味，简单又美味。\\n10. 烤蔬菜拼盘：将各种蔬菜（如茄子、南瓜、青椒）切成小块，刷上少许橄榄油后放入烤箱中烤制，既可以作为主食也可以作为配餐。', response_metadata={'token_usage': {'completion_tokens': 487, 'prompt_tokens': 489, 'total_tokens': 976}, 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None})]}}\n",
      "{'__end__': {'conversation': [('user', '推荐一点夏天的减肥餐'), AIMessage(content='夏天是减肥的好时机，因为天气炎热，人们更容易出汗和代谢。以下是一些适合夏季的减肥餐建议：\\n\\n1. 沙拉：沙拉是夏天最受欢迎的健康食品之一。你可以选择各种新鲜蔬菜、水果、瘦肉或海鲜作为配料，搭配低脂沙拉酱或橄榄油醋汁。例如，尝试黄瓜番茄沙拉、牛油果虾仁沙拉等。\\n2. 烤鱼和蔬菜：将新鲜的鱼类（如鲈鱼、三文鱼）用香料腌制后，放入烤箱中烤制，再搭配一些新鲜蔬菜（如芦笋、西葫芦、胡萝卜）一起食用，既美味又健康。\\n3. 鸡肉串配时蔬：将鸡胸肉切成小块，加入调料腌制后穿在竹签上，与各种蔬菜（如青椒、洋葱、蘑菇）一起烤制，既可以作为正餐也可以作为小吃。\\n4. 水果酸奶冰沙：将新鲜的水果（如草莓、蓝莓、香蕉）和低脂酸奶混合在一起，再加入一些冰块打成冰沙，既清凉解暑又营养丰富。\\n5. 清蒸海鲜配糙米饭：选择新鲜的虾、贝类或鱼类进行清蒸，搭配一碗糙米饭，既能满足你的味蕾又能提供足够的蛋白质和纤维素。\\n6. 蔬菜汤：用各种新鲜蔬菜（如番茄、胡萝卜、芹菜）熬制一锅美味的蔬菜汤，既可以作为主食也可以作为配餐。\\n7. 烤鸡胸肉配沙拉：将鸡胸肉切成小块，加入调料腌制后放入烤箱中烤制，再搭配一份新鲜的蔬菜沙拉，简单又健康。\\n8. 蒸红薯和鸡蛋：将红薯去皮切块，与鸡蛋一起放入锅中蒸熟，既可以作为主食也可以作为配餐。\\n9. 番茄意面：用新鲜番茄熬制成酱汁，拌入意大利面中，再加入一些橄榄油、盐和黑胡椒调味，简单又美味。\\n10. 烤蔬菜拼盘：将各种蔬菜（如茄子、南瓜、青椒）切成小块，刷上少许橄榄油后放入烤箱中烤制，既可以作为主食也可以作为配餐。', response_metadata={'token_usage': {'completion_tokens': 487, 'prompt_tokens': 489, 'total_tokens': 976}, 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None})]}}\n"
     ]
    }
   ],
   "source": [
    "for step in graph.stream({\"conversation\": [(\"user\", \"推荐一点夏天的减肥餐\")]}):\n",
    "    print(step)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
